<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			window.onload = function(){
				// 1.定义构造方法
				function Fn(){  // 内部语句: this.prototype = {}
				}
				
				// 每个函数function都有一个prototype, 即显式原型(属性)
				console.log(Fn.prototype)
				
				// 2.创建实例对象
				// 每一个实例对象都有一个__proto__, 可称为隐式原型(属性)
				var fn= new Fn()  // 内部语句: this.__proto__ = Fn.prototype
				console.log(fn.__proto__)
				
				// 对象的隐式原型的值为其对应构造函数的显式原型的值
				console.log(Fn.prototype === fn.__proto__)  // true
				
				// 3.给原型添加方法
				Fn.prototype.test = function(){
					console.log("Fn test()")
				}
				
				// 4.通过实例调用原型的方法
				fn.test()  // Fn test()
			}
		</script>
	</head>
	<body>
	</body>
</html>
